#include "Bloque.h"

Bloque::Bloque(){
	cantidad_registros = 0;
	puntero_bloque = bloque;
	memcpy(puntero_bloque, &cantidad_registros, 4);
	puntero_bloque = puntero_bloque + 4;
	posicion_bloque = 4; //Las primeras 4 posiciones están reservadas para cantidad_registros
}

Bloque::~Bloque(){
	memset(this->getBloque(),'\0',TAMANIO_BLOQUE);
}

bool Bloque::lleno(Registro *registro){
	int espacio = (TAMANIO_BLOQUE - (posicion_bloque + 8 + registro->getLongitudNombre())); //4 para el código y 4 para la longitud del nombre
	return (espacio < 0);
}

void Bloque::agregarRegistro(Registro* registro){
	if(!this->lleno(registro)){
		cantidad_registros++;
		memcpy(bloque, &cantidad_registros, 4);
		memcpy(puntero_bloque, registro->getPunteroCodigo(), 4);
		posicion_bloque = posicion_bloque + 4;
		puntero_bloque = puntero_bloque + 4;
		memcpy(puntero_bloque, registro->getPunteroLongitudNombre(), 4);
		posicion_bloque = posicion_bloque + 4;
		puntero_bloque = puntero_bloque + 4;
		memcpy(puntero_bloque, registro->getNombre(), registro->getLongitudNombre());
		posicion_bloque = (posicion_bloque + registro->getLongitudNombre());
		puntero_bloque = (puntero_bloque + registro->getLongitudNombre());
	}
}

int Bloque::getCantidadRegistros(){
	return cantidad_registros;
}

char* Bloque::getPunteroBloque(){
	return puntero_bloque;
}

char* Bloque::getBloque(){
	char* punteroAlInicio = bloque;
	return punteroAlInicio;
}
